Make longtask WPT layouttests less flaky This CL improves tests in external/wpt/longtask-timing by: * Increasing the length of a longtask from ~51 to ~60 to prevent a coarse performance.now() granularity from affecting the tests. * Wrapping the long tasks or iframes containing longtasks inside onload handlers to ensure that the PerformanceObserver is registered by the time the longtask is executed. Test: third_party/blink/tools/run_web_tests external/wpt/longtask-timing --iterations=1000 did not produce flakes. Bug: 796668 Change-Id: Ic2ce59f7d221566f5443da9e9c7d36c7bd7bbe6f Reviewed-on: https://chromium-review.googlesource.com/1138725 Commit-Queue: Nicolás Peña Moreno <npm@chromium.org> Reviewed-by: Timothy Dresser <tdresser@chromium.org> Cr-Commit-Position: refs/heads/master@{#575396} 
diff --git a/longtask-timing/longtask-attributes.html b/longtask-timing/longtask-attributes.html index bd7e478..6af90cd 100644 --- a/longtask-timing/longtask-attributes.html +++ b/longtask-timing/longtask-attributes.html 
@@ -44,10 +44,11 @@  );  observer.observe({entryTypes: ['longtask']});   - /* Generate a slow task */ - const begin = window.performance.now(); - while (window.performance.now() < begin + 51); - + window.onload = () => { + /* Generate a slow task */ + const begin = window.performance.now(); + while (window.performance.now() < begin + 60); + };  }, 'Performance longtask entries are observable.');  </script>   
diff --git a/longtask-timing/longtask-in-childiframe-crossorigin.html b/longtask-timing/longtask-in-childiframe-crossorigin.html index 58fa519..17b0fd2 100644 --- a/longtask-timing/longtask-in-childiframe-crossorigin.html +++ b/longtask-timing/longtask-in-childiframe-crossorigin.html 
@@ -45,13 +45,15 @@  })  );  observer.observe({entryTypes: ['longtask']}); - const iframe = document.createElement('iframe'); - iframe.id = 'child-iframe-id'; - iframe.name = 'child-iframe-name'; - // Simulate cross-origin by using sandbox. - iframe.sandbox = "allow-scripts"; - document.body.appendChild(iframe); - iframe.src = 'resources/subframe-with-longtask.html'; + window.onload = () => { + const iframe = document.createElement('iframe'); + iframe.id = 'child-iframe-id'; + iframe.name = 'child-iframe-name'; + // Simulate cross-origin by using sandbox. + iframe.sandbox = "allow-scripts"; + document.body.appendChild(iframe); + iframe.src = 'resources/subframe-with-longtask.html'; + };  }, 'Performance longtask entries in cross-origin child iframe are observable in parent.');  </script>   
diff --git a/longtask-timing/longtask-in-childiframe.html b/longtask-timing/longtask-in-childiframe.html index 536bd6e..b713704 100644 --- a/longtask-timing/longtask-in-childiframe.html +++ b/longtask-timing/longtask-in-childiframe.html 
@@ -49,11 +49,13 @@  })  );  observer.observe({entryTypes: ['longtask']}); - const iframe = document.createElement('iframe'); - iframe.id = 'child-iframe-id'; - iframe.name = 'child-iframe-name'; - document.body.appendChild(iframe); - iframe.src = 'resources/subframe-with-longtask.html'; + window.onload = () => { + const iframe = document.createElement('iframe'); + iframe.id = 'child-iframe-id'; + iframe.name = 'child-iframe-name'; + document.body.appendChild(iframe); + iframe.src = 'resources/subframe-with-longtask.html'; + };  }, 'Performance longtask entries in child iframe are observable in parent.');  </script>   
diff --git a/longtask-timing/longtask-in-externalscript.html b/longtask-timing/longtask-in-externalscript.html index a179198..51c58af 100644 --- a/longtask-timing/longtask-in-externalscript.html +++ b/longtask-timing/longtask-in-externalscript.html 
@@ -5,7 +5,6 @@    <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script> -<script src="resources/makelongtask.js"></script>    <h1>Long Task: External Script</h1>  <div id="log"></div> @@ -41,7 +40,11 @@  })  );  observer.observe({entryTypes: ['longtask']}); + window.onload = () => { + const script = document.createElement('script'); + script.src = 'resources/makelongtask.js'; + document.body.appendChild(script); + }  }, 'Performance longtask entries are observable.');  </script> -  </body> \ No newline at end of file 
diff --git a/longtask-timing/longtask-in-parentiframe.html b/longtask-timing/longtask-in-parentiframe.html index 379d051..2e7a999 100644 --- a/longtask-timing/longtask-in-parentiframe.html +++ b/longtask-timing/longtask-in-parentiframe.html 
@@ -24,16 +24,16 @@  }, 'Performance longtask entries in parent are observable in child iframe.');    const iframe = document.createElement('iframe'); - iframe.onload = function() { - t.step_timeout(function(){ - const begin = window.performance.now(); - while (window.performance.now() < begin + 51); - }, 50); - }  iframe.id = 'child-iframe-id';  iframe.name = 'child-iframe-name';  document.body.appendChild(iframe);  iframe.src = 'resources/subframe-observing-longtask.html'; + iframe.onload = () => { + t.step_timeout( () => { + const begin = window.performance.now(); + while (window.performance.now() < begin + 60); + }, 50); + };  </script>    </body> 
diff --git a/longtask-timing/longtask-in-raf.html b/longtask-timing/longtask-in-raf.html index 43885ab..8a5a729 100644 --- a/longtask-timing/longtask-in-raf.html +++ b/longtask-timing/longtask-in-raf.html 
@@ -5,7 +5,6 @@    <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script> -<script src="resources/raflongtask.js"></script>    <h1>Long Task: requestAnimationFrame</h1>  <div id="log"></div> @@ -41,7 +40,11 @@  })  );  observer.observe({entryTypes: ['longtask']}); + window.onload = () => { + const script = document.createElement('script'); + script.src = 'resources/raflongtask.js'; + document.body.appendChild(script); + };  }, 'Performance longtask entries are observable.');  </script> -  </body> 
diff --git a/longtask-timing/longtask-in-sibling-iframe-crossorigin.html b/longtask-timing/longtask-in-sibling-iframe-crossorigin.html index ec5d934..cfcc189 100644 --- a/longtask-timing/longtask-in-sibling-iframe-crossorigin.html +++ b/longtask-timing/longtask-in-sibling-iframe-crossorigin.html 
@@ -27,14 +27,16 @@  document.body.appendChild(observingFrame);  observingFrame.src = 'resources/subframe-observing-longtask.html'   - /* Create a cross-origin iframe that generates a long task. */ - const longtaskFrame = document.createElement('iframe'); - longtaskFrame.id = 'longtask-iframe-id'; - longtaskFrame.name = 'longtask-iframe-name'; - // Simulate cross-origin by using sandbox. - longtaskFrame.sandbox = "allow-scripts"; - document.body.appendChild(longtaskFrame); - longtaskFrame.src = 'resources/subframe-with-longtask.html' + observingFrame.onload = () => { + /* Create a cross-origin iframe that generates a long task. */ + const longtaskFrame = document.createElement('iframe'); + longtaskFrame.id = 'longtask-iframe-id'; + longtaskFrame.name = 'longtask-iframe-name'; + // Simulate cross-origin by using sandbox. + longtaskFrame.sandbox = "allow-scripts"; + document.body.appendChild(longtaskFrame); + longtaskFrame.src = 'resources/subframe-with-longtask.html' + };  }, 'Performance longtask entries from cross-origin iframe are observable in its sibling.');  </script>  </body> 
diff --git a/longtask-timing/longtask-in-sibling-iframe.html b/longtask-timing/longtask-in-sibling-iframe.html index 9f584c7..e6041e4 100644 --- a/longtask-timing/longtask-in-sibling-iframe.html +++ b/longtask-timing/longtask-in-sibling-iframe.html 
@@ -27,11 +27,13 @@  document.body.appendChild(observingFrame);  observingFrame.src = 'resources/subframe-observing-longtask.html'   - const longtaskFrame = document.createElement('iframe'); - longtaskFrame.id = 'longtask-iframe-id'; - longtaskFrame.name = 'longtask-iframe-name'; - document.body.appendChild(longtaskFrame); - longtaskFrame.src = 'resources/subframe-with-longtask.html' + observingFrame.onload = () => { + const longtaskFrame = document.createElement('iframe'); + longtaskFrame.id = 'longtask-iframe-id'; + longtaskFrame.name = 'longtask-iframe-name'; + document.body.appendChild(longtaskFrame); + longtaskFrame.src = 'resources/subframe-with-longtask.html' + };  }, 'Performance longtask entries are observable in sibling iframe.');  </script>  </body> 
diff --git a/longtask-timing/longtask-tojson.html b/longtask-timing/longtask-tojson.html index 63aba31..20a97a1 100644 --- a/longtask-timing/longtask-tojson.html +++ b/longtask-timing/longtask-tojson.html 
@@ -66,9 +66,11 @@  );  observer.observe({entryTypes: ['longtask']});   - // Trigger a long task. - const begin = window.performance.now(); - while (window.performance.now() < begin + 51); + window.onload = () => { + // Trigger a long task. + const begin = window.performance.now(); + while (window.performance.now() < begin + 60); + };  }, 'Test toJSON() in PerformanceLongTaskTiming and TaskAttributionTiming');  </script>  </body> 
diff --git a/longtask-timing/resources/makelongtask.js b/longtask-timing/resources/makelongtask.js index d58b4f9..75de545 100644 --- a/longtask-timing/resources/makelongtask.js +++ b/longtask-timing/resources/makelongtask.js 
@@ -1,3 +1,3 @@  /* Generate a slow task. */  const begin = window.performance.now(); -while (window.performance.now() < begin + 51); +while (window.performance.now() < begin + 60); 
diff --git a/longtask-timing/resources/raflongtask.js b/longtask-timing/resources/raflongtask.js index 95bfce1..ec39cb8 100644 --- a/longtask-timing/resources/raflongtask.js +++ b/longtask-timing/resources/raflongtask.js 
@@ -1,5 +1,5 @@  window.requestAnimationFrame(function() {  /* Generate a slow task. */  const begin = window.performance.now(); - while (window.performance.now() < begin + 51); + while (window.performance.now() < begin + 60);  }); 
diff --git a/longtask-timing/resources/subframe-with-longtask.html b/longtask-timing/resources/subframe-with-longtask.html index 957d114..298b252 100644 --- a/longtask-timing/resources/subframe-with-longtask.html +++ b/longtask-timing/resources/subframe-with-longtask.html 
@@ -7,5 +7,5 @@    <script>  const begin = window.performance.now(); - while (window.performance.now() < begin + 51); + while (window.performance.now() < begin + 60);  </script> 
diff --git a/longtask-timing/shared-renderer/longtask-in-new-window.html b/longtask-timing/shared-renderer/longtask-in-new-window.html index 95d4cdf..3a68d14 100644 --- a/longtask-timing/shared-renderer/longtask-in-new-window.html +++ b/longtask-timing/shared-renderer/longtask-in-new-window.html 
@@ -38,12 +38,14 @@  );  observer.observe({entryTypes: ['mark', 'longtask']});   - // Open a window with a longtask. - const other_window = window.open('resources/frame-with-longtask.html'); - window.addEventListener('message', t.step_func(e => { - // Do a mark (after the other window's longtask) to fire the callback. - self.performance.mark('mark1'); - })); + window.onload = () => { + // Open a window with a longtask. + const other_window = window.open('resources/frame-with-longtask.html'); + window.addEventListener('message', t.step_func(e => { + // Do a mark (after the other window's longtask) to fire the callback. + self.performance.mark('mark1'); + })); + };  }, 'A longtask in a frame from window.open is not reported in original frame');  </script>  </body> 
diff --git a/longtask-timing/shared-renderer/resources/frame-with-longtask.html b/longtask-timing/shared-renderer/resources/frame-with-longtask.html index 72e525f..9d0273e 100644 --- a/longtask-timing/shared-renderer/resources/frame-with-longtask.html +++ b/longtask-timing/shared-renderer/resources/frame-with-longtask.html 
@@ -8,7 +8,7 @@    <script>  const begin = window.performance.now(); - while (window.performance.now() < begin + 51); + while (window.performance.now() < begin + 60);  window.opener.postMessage('Finished.', '*');  </script>  </body>